package collection;

import java.util.LinkedList;

/**
 * LinkedList集合
 * LinkedList类继承AbstractList类，并实现了List、Queue接口
 * 可以在任何位置高效插入和删除的一个有序序列，简而言之就是数据结构里的链表
 * 底层为一个双向链表，且LinkedList类实现了List和Deque
 *
 * boolean add(E e)                     将指定的元素列表末尾
 * void add(int index, E element)       在列表指定位置上插入指定的元素
 * boolean addAll(Collection<? extends E> c)    追加指定集合的所有元素到列表末尾，按他们的指定集合的迭代器返回
 * boolean addAll(int index, Collection<? extends E> c)     将指定集合中的所有元素插入到该列表中，从指定位置开始
 * void addFirst(E e)                   在此列表的开始处插入指定的元素
 * void addLast(E e)                    将指定的元素列表的结束
 * void clear()                         从这个列表中移除所有的元素
 * Object clone()                       返回该LinkedList浅拷贝
 * boolean contains(Object o)           如果这个列表包含指定元素则返回true，否则返回false
 * Iterator<E> descendingIterator()     返回在反向顺序在deque容器元素的迭代器
 * E element()                          检索，但不删除，此列表的头（第一个元素）
 * E get(int index)                     返回此列表中指定位置的元素
 * E getFirst()                         返回此列表中的第一个元素
 * E getLast()                          返回此列表中的最后一个元素
 * int indexOf(Object o)                返回此列表中指定元素的第一个出现的索引，或-如果此列表不包含元素，或-1
 * int lastIndexOf(Object o)            返回此列表中指定元素的最后一个出现的索引，或-如果此列表不包含元素，或-1
 * ListIterator<E> listIterator(int index)  返回此列表中元素的列表迭代器（在适当的顺序），从列表中的指定位置开始
 * boolean offer(E e)                   将指定的元素添加到列表的尾部（最后一个元素）
 * boolean offerFirst(E e)              在列表的前面插入指定的元素
 * boolean offerLast(E e)               在列表的结尾插入指定的元素
 * E peek()                             检索，但不删除，此列表的头（第一个元素）
 * E peekFirst()                        检索，但不删除该列表的第一个元素，或返回 null如果这个列表是空的
 * E peekLast()                         检索，但不删除该列表的最后一个元素，或返回 null如果这个列表是空的
 * E poll()                             检索并删除此列表的头（第一个元素）
 * E pollFirst()                        检索并移除此列表的第一个元素，如果这个列表是空的则返回null
 * E pollLast()                         检索并移除此列表的最后一个元素，如果这个列表是空的则返回null
 * E pop()                              从这个列表所表示的堆栈中弹出一个元素
 * void push(E e)                       将一个元素推到由该列表所表示的堆栈上
 * E remove()                           检索并删除此列表的头（第一个元素）
 * E remove(int index)                  移除此列表中指定位置的元素
 * boolean remove(Object o)             从该列表中移除指定元素的第一个发生，不存在则返回false
 * E removeFirst()                      移除并返回此列表中的第一个元素
 * boolean removeFirstOccurrence(Object o)  删除此列表中指定元素的第一个出现（当遍历从头到尾的列表）
 * E removeLast()                       移除并返回此列表中的最后一个元素
 * boolean removeLastOccurrence(Object o)   删除此列表中指定元素的最后一次（当遍历从头到尾的列表时）
 * E set(int index, E element)          用指定元素替换此列表中指定位置的元素
 * int size()                           返回此列表中元素的数目
 * Spliterator<E> spliterator()         创建一个后期绑定和快速失败Spliterator超过此列表中的元素
 * Object[] toArray()                   返回一个数组，包含在这个列表中的所有元素在适当的顺序（从第一个到最后一个元素）
 * <T> T[] toArray(T[] a)               返回一个数组，包含在这个列表中的所有元素在适当的顺序（从第一到最后一个元素）；
 *                                          返回数组的运行时类型是指定的数组的运行时类型
 *
 *
 *
 *
 * LinkedList继承Collection
 * 在JDK1.8中，Collection中加入了removeIf方法,其子类自然也继承了此方法
 * default boolean removeIf(Predicate<? super E> filter)    删除满足给定谓词的此集合的所有元素
 * */
public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<Integer> list =new LinkedList<>();
        //链表初始化，先赋初始值
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        for(int v : list)
            System.out.println(v);
    }
}
